package com.xxgc.demo.utils;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import java.io.File;
import java.io.IOException;

/**
 * @Author: Sjy
 * @Date :2023/10/8 - 10 - 08 - 17:13
 * 缩略图工具类
 * 图片压缩工具类，使用thumbnailator 0.4.20版本的框架进行封装
 */
public class ImageCompressUtil {

    /**
     * 指定大小进行等比缩放
     *
     * @param source 源文件路径
     * @param output 输出文件路径
     * @param size   压缩尺寸(宽或高)
     * @throws IOException 图片处理异常
     */
    public static void imageCompress(String source, String output, int size) throws IOException {
        Thumbnails.of(source)
                .size(size, size)
                .toFile(output);
    }

    /**
     * 不按照比例，指定大小进行缩放
     *
     * @param source  源文件路径
     * @param output  输出文件路径
     * @param width   压缩宽度
     * @param height  压缩高度
     * @throws IOException 图片处理异常
     */
    public static void imageCompress(String source, String output, int width, int height) throws IOException {
        Thumbnails.of(source)
                .size(width, height)
                .keepAspectRatio(false)
                .toFile(output);
    }


    /**
     * 指定压缩质量进行压缩
     *
     * @param source  源文件路径
     * @param output  输出文件路径
     * @param quality 压缩质量 (0.0 - 1.0)
     * @throws IOException 图片处理异常
     */
    public static void imageCompress(String source, String output, float quality) throws IOException {
        Thumbnails.of(source)
                .scale(1f)
                .outputQuality(quality)
                .toFile(output);
    }

    /**
     * 指定大小和压缩质量进行缩放
     *
     * @param source  源文件路径
     * @param output  输出文件路径
     * @param size    压缩尺寸(宽或高)
     * @param quality 压缩质量 (0.0 - 1.0)
     * @throws IOException 图片处理异常
     */
    public static void imageCompress(String source, String output, int size, float quality) throws IOException {
        Thumbnails.of(source)
                .size(size, size)
                .outputQuality(quality)
                .toFile(output);
    }

    /**
     * 添加水印
     *
     * @param source       源文件路径
     * @param output       输出文件路径
     * @param watermark    水印文件路径
     * @param position     水印位置（Positions）
     * @param transparency 水印透明度 (0.0 - 1.0)
     * @throws IOException 图片处理异常
     */
    public static void addWatermark(String source, String output, String watermark, Positions position, float transparency) throws IOException {
        Thumbnails.of(source)
                .watermark(position, Thumbnails.of(new File(watermark)).asBufferedImage(), transparency)
                .toFile(output);
    }
}
